package org.phantom.securityframework.api;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.phantom.securityframework.api.Account;

import org.phantom.securityframework.api.domain.Group;
import org.phantom.securityframework.api.domain.Role;

/**
 * 角色管理接口
 * @author david
 *
 */
public interface RoleManager {
	/**
	 * 新建角色
	 * @param role
	 * @return
	 */
	Role add(Role role);
	/**
	 * 修改角色
	 * @param role
	 * @return
	 */
	Role modify(Role role);
	/**
	 * 移除角色
	 * @param role
	 * @return
	 */
	Role remove(Role role);
	/**
	 * 移除角色
	 * @param roleId
	 * @return
	 */
	Role remove(Integer roleId);
	/**
	 * 获取角色
	 * @param roleId
	 * @return
	 */
	Role get(Integer roleId);
	/**
	 * 角色列表
	 * @return
	 */
	List<Role> list();
	/**
	 * 条件角色列表
	 * @param params
	 * @return
	 */
	List<Role> list(Map<String, Object> params);
	/**
	 * 角色总数
	 * @return
	 */
	Integer count();
	/**
	 * 条件角色总数
	 * @param params
	 * @return
	 */
	Integer count(Map<String,Object> params);
	
	
	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void relAccountRole(Account account,Role[] roles);
	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void relAccountRole(Account account,Serializable[] roleIds);
	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void relAccountRole(Serializable accountId,Serializable[] roleIds);

	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void unrelAccountRole(Account account,Role[] roles);
	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void unrelAccountRole(Account account,Serializable[] roleIds);
	/**
	 * 维护帐号和角色关系
	 * @param account
	 * @param roles
	 */
	void unrelAccountRole(Serializable accountId,Serializable[] roleIds);
	
	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void relGroupRole(Group group,Role[] roles);
	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void relGroupRole(Group group,Serializable[] roleIds);
	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void relGroupRole(Serializable groupId,Serializable[] roleIds);

	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void unrelGroupRole(Group group,Role[] role);
	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void unrelGroupRole(Group group,Serializable[] roleIds);
	/**
	 * 用户组角色关系维护
	 * @param group
	 * @param role
	 */
	void unrelGroupRole(Serializable groupId,Serializable[] roleIds);
	

	
	/**
	 * 获取角色的权限
	 * @param group
	 * @return
	 */
	List<Permission> permissions(Role role);
}
